लाइव्ह डेव्हलपमेंट अपडेट्ससाठी जावास्क्रिप्ट मॉड्युल हॉट अपडेट प्रोटोकॉल (HMR) चा वापर करा. जलद डीबगिंग, सुधारित सहयोग आणि कार्यक्षम कोड पुनरावृत्तीसह आपला वर्कफ्लो सुधारा.
जावास्क्रिप्ट मॉड्युल हॉट अपडेट प्रोटोकॉल: लाइव्ह डेव्हलपमेंट अपडेट्स
वेब डेव्हलपमेंटच्या वेगवान जगात, कार्यक्षमता सर्वात महत्त्वाची आहे. प्रत्येक कोड बदलानंतर ब्राउझर मॅन्युअली रिफ्रेश करण्याचे दिवस आता गेले. जावास्क्रिप्ट मॉड्युल हॉट अपडेट प्रोटोकॉल (HMR) ने डेव्हलपमेंट वर्कफ्लोमध्ये क्रांती घडवून आणली आहे, ज्यामुळे डेव्हलपर्सना ॲप्लिकेशनची स्थिती न गमावता रिअल-टाइममध्ये बदल पाहता येतात. हा लेख HMR, त्याचे फायदे, अंमलबजावणी आणि आधुनिक फ्रंट-एंड डेव्हलपमेंटवरील त्याचा प्रभाव याबद्दल सविस्तर माहिती देतो.
जावास्क्रिप्ट मॉड्युल हॉट अपडेट प्रोटोकॉल (HMR) म्हणजे काय?
HMR ही एक यंत्रणा आहे जी चालू असलेल्या ॲप्लिकेशनमधील मॉड्यूल्सना पूर्ण पेज रीलोड न करता अपडेट करण्याची परवानगी देते. याचा अर्थ असा की जेव्हा तुम्ही तुमच्या कोडमध्ये बदल करता, तेव्हा ब्राउझर सध्याची स्थिती न गमावता ॲप्लिकेशनच्या संबंधित भागांना अखंडपणे अपडेट करतो. हे एखाद्या चालू प्रणालीला बंद न करता त्यावर शस्त्रक्रिया करण्यासारखे आहे. HMR चे सौंदर्य ॲप्लिकेशनचा संदर्भ कायम ठेवताना वापरकर्त्याच्या इंटरफेसला नवीनतम बदलांसह रिफ्रेश करण्याच्या क्षमतेमध्ये आहे.
पारंपारिक लाइव्ह रिलोडिंग तंत्रे सोर्स कोडमध्ये बदल आढळल्यास संपूर्ण पेज रिफ्रेश करतात. मॅन्युअली रिफ्रेश करण्यापेक्षा हे चांगले असले तरी, ते डेव्हलपमेंटच्या प्रवाहात व्यत्यय आणते, विशेषतः जेव्हा क्लिष्ट ॲप्लिकेशन स्टेट्स हाताळल्या जातात. दुसरीकडे, HMR अधिक सूक्ष्म आहे. ते फक्त बदललेले मॉड्यूल्स आणि त्यांच्या डिपेंडेंसीज अपडेट करते, विद्यमान ॲप्लिकेशनची स्थिती जपते.
HMR चे मुख्य फायदे
HMR अनेक फायदे देते जे डेव्हलपरचा अनुभव लक्षणीयरीत्या वाढवतात आणि एकूण डेव्हलपमेंट प्रक्रियेत सुधारणा करतात:
- जलद डेव्हलपमेंट सायकल: HMR मुळे, तुम्ही पूर्ण पेज रीलोडच्या विलंबाशिवाय रिअल-टाइममध्ये बदल पाहू शकता. यामुळे अपडेट्सची वाट पाहण्यात घालवलेला वेळ लक्षणीयरीत्या कमी होतो आणि तुम्हाला तुमच्या कोडवर अधिक वेगाने काम करता येते.
- ॲप्लिकेशन स्थिती जतन करणे: पारंपारिक लाइव्ह रिलोडिंगच्या विपरीत, HMR ॲप्लिकेशनची स्थिती जतन करते. याचा अर्थ असा की प्रत्येक वेळी तुम्ही बदल करता तेव्हा तुम्हाला सुरवातीपासून प्रारंभ करण्याची आवश्यकता नाही. तुम्ही ॲप्लिकेशनमध्ये तुमची सध्याची स्थिती, जसे की फॉर्म इनपुट किंवा नेव्हिगेशन स्थिती, कायम ठेवू शकता आणि तुमच्या बदलांचे परिणाम त्वरित पाहू शकता.
- सुधारित डीबगिंग: HMR नेमके कोणते कोड बदल समस्या निर्माण करत आहेत हे शोधून डीबगिंग सोपे करते. तुम्ही कोडमध्ये बदल करून परिणाम त्वरित पाहू शकता, ज्यामुळे बग्स ओळखणे आणि दुरुस्त करणे सोपे होते.
- सुधारित सहयोग: HMR एकाच वेळी अनेक डेव्हलपर्सना एकाच प्रोजेक्टवर काम करण्याची परवानगी देऊन सहयोगास मदत करते. एका डेव्हलपरने केलेले बदल इतरांना त्वरित दिसू शकतात, ज्यामुळे अखंड टीमवर्कला प्रोत्साहन मिळते.
- सर्व्हरवरील भार कमी: फक्त बदललेले मॉड्यूल्स अपडेट करून, HMR पूर्ण पेज रीलोडच्या तुलनेत सर्व्हरवरील भार कमी करते. हे विशेषतः अनेक वापरकर्त्यांसह मोठ्या ॲप्लिकेशन्ससाठी फायदेशीर ठरू शकते.
- डेव्हलपमेंट दरम्यान उत्तम वापरकर्ता अनुभव: जरी हे प्रामुख्याने डेव्हलपरचे साधन असले तरी, HMR UI बदलांची जलद पुनरावृत्ती आणि चाचणी करण्यास परवानगी देऊन डेव्हलपमेंट दरम्यान वापरकर्त्याचा अनुभव अप्रत्यक्षपणे सुधारते.
HMR कसे कार्य करते
HMR तंत्रज्ञान आणि तंत्रांच्या संयोजनाद्वारे कार्य करते. प्रक्रियेचा एक सोपा आढावा येथे आहे:
- फाइल सिस्टम मॉनिटरिंग: एक साधन (सहसा मॉड्युल बंडलर) तुमच्या सोर्स कोडमधील बदलांसाठी फाइल सिस्टमवर लक्ष ठेवते.
- बदल ओळखणे: जेव्हा बदल आढळतो, तेव्हा साधन ठरवते की कोणते मॉड्यूल्स प्रभावित झाले आहेत.
- मॉड्यूल कंपाईलेशन: प्रभावित मॉड्यूल्स पुन्हा कंपाइल केले जातात.
- हॉट अपडेट निर्मिती: एक "हॉट अपडेट" तयार केला जातो, ज्यात अपडेट केलेला कोड आणि चालू ॲप्लिकेशनमध्ये बदल कसे लागू करावे याबद्दलच्या सूचना असतात.
- वेबसॉकेट कम्युनिकेशन: हॉट अपडेट वेबसॉकेट कनेक्शनद्वारे ब्राउझरला पाठवला जातो.
- क्लायंट-साइड अपडेट: ब्राउझरला हॉट अपडेट मिळतो आणि पूर्ण पेज रीलोड न करता चालू ॲप्लिकेशनमध्ये बदल लागू करतो. यात सामान्यतः जुन्या मॉड्यूल्सना नवीन मॉड्यूल्ससह बदलणे आणि कोणत्याही डिपेंडेंसीज अपडेट करणे समाविष्ट असते.
लोकप्रिय मॉड्युल बंडलर्ससह अंमलबजावणी
HMR सामान्यतः वेबपॅक, पार्सल आणि व्हाइट सारख्या मॉड्युल बंडलर्स वापरून लागू केले जाते. ही साधने HMR साठी अंगभूत समर्थन देतात, ज्यामुळे ते तुमच्या डेव्हलपमेंट वर्कफ्लोमध्ये समाकलित करणे सोपे होते. या प्रत्येक बंडलरसह HMR कसे लागू करायचे ते पाहूया.वेबपॅक
वेबपॅक एक शक्तिशाली आणि लवचिक मॉड्युल बंडलर आहे जो HMR साठी उत्कृष्ट समर्थन देतो. वेबपॅकमध्ये HMR सक्षम करण्यासाठी, तुम्हाला सामान्यतः हे करणे आवश्यक आहे:
- `webpack-dev-server` पॅकेज इंस्टॉल करा:
npm install webpack-dev-server --save-dev - तुमच्या वेबपॅक कॉन्फिगरेशनमध्ये `HotModuleReplacementPlugin` जोडा:
const webpack = require('webpack'); module.exports = { // ... other configurations plugins: [ new webpack.HotModuleReplacementPlugin() ], devServer: { hot: true, }, }; - वेबपॅक डेव्हलपमेंट सर्व्हर सुरू करा:
webpack-dev-server --hot
तुमच्या ॲप्लिकेशन कोडमध्ये, तुम्हाला हॉट अपडेट्स हाताळण्यासाठी काही कोड जोडण्याची आवश्यकता असू शकते. यात सामान्यतः `module.hot` API उपलब्ध आहे की नाही हे तपासणे आणि अपडेट्स स्वीकारणे समाविष्ट असते. उदाहरणार्थ, रिएक्ट कंपोनंटमध्ये:
if (module.hot) {
module.hot.accept('./MyComponent', () => {
// Re-render the component
render();
});
}
पार्सल
पार्सल एक शून्य-कॉन्फिगरेशन मॉड्युल बंडलर आहे जो HMR ला आउट-ऑफ-द-बॉक्स समर्थन देतो. पार्सलमध्ये HMR सक्षम करण्यासाठी, फक्त पार्सल डेव्हलपमेंट सर्व्हर सुरू करा:
parcel index.html
पार्सल कोणत्याही अतिरिक्त कॉन्फिगरेशनची आवश्यकता न ठेवता HMR प्रक्रिया स्वयंचलितपणे हाताळते. यामुळे HMR सह प्रारंभ करणे खूप सोपे होते.
व्हाइट
व्हाइट एक आधुनिक बिल्ड टूल आहे जे वेग आणि कार्यक्षमतेवर लक्ष केंद्रित करते. ते HMR साठी अंगभूत समर्थन देखील देते. व्हाइटमध्ये HMR सक्षम करण्यासाठी, फक्त व्हाइट डेव्हलपमेंट सर्व्हर सुरू करा:
npm create vite@latest my-vue-app --template vue
cd my-vue-app
npm install
npm run dev
व्हाइट अत्यंत जलद HMR अपडेट्स प्रदान करण्यासाठी नेटिव्ह ES मॉड्यूल्स आणि esbuild चा वापर करते. व्हाइट डेव्ह सर्व्हर आपोआप बदल ओळखतो आणि आवश्यक अपडेट्स ब्राउझरला पाठवतो.
प्रगत HMR तंत्रे
HMR ची मूलभूत अंमलबजावणी सोपी असली तरी, अनेक प्रगत तंत्रे आहेत जी तुमच्या डेव्हलपमेंट वर्कफ्लोला आणखी सुधारू शकतात:
- HMR सह स्टेट मॅनेजमेंट: क्लिष्ट ॲप्लिकेशन स्टेट्स हाताळताना, HMR अपडेट्स दरम्यान स्टेट योग्यरित्या जतन केली जाईल याची खात्री करणे महत्त्वाचे आहे. हे Redux किंवा Vuex सारख्या स्टेट मॅनेजमेंट लायब्ररी वापरून साध्य केले जाऊ शकते, जे ॲप्लिकेशन स्टेट टिकवून ठेवण्यासाठी आणि पुनर्संचयित करण्यासाठी यंत्रणा प्रदान करतात.
- HMR सह कोड स्प्लिटिंग: कोड स्प्लिटिंग तुम्हाला तुमच्या ॲप्लिकेशनला लहान भागांमध्ये (chunks) विभागण्याची परवानगी देते, जे मागणीनुसार लोड केले जाऊ शकतात. यामुळे तुमच्या ॲप्लिकेशनचा प्रारंभिक लोड वेळ सुधारू शकतो. HMR सह वापरल्यास, कोड स्प्लिटिंग केवळ बदललेले चंक्स अपडेट करून अपडेट प्रक्रिया आणखी ऑप्टिमाइझ करू शकते.
- कस्टम HMR हँडलर्स: काही प्रकरणांमध्ये, तुम्हाला विशिष्ट अपडेट परिस्थिती हाताळण्यासाठी कस्टम HMR हँडलर्स लागू करण्याची आवश्यकता असू शकते. उदाहरणार्थ, तुम्हाला एखाद्या कंपोनंटची स्टायलिंग अपडेट करण्याची किंवा तृतीय-पक्ष लायब्ररी पुन्हा सुरू करण्याची आवश्यकता असू शकते.
- सर्व्हर-साइड रेंडरिंगसाठी HMR: HMR फक्त क्लायंट-साइड ॲप्लिकेशन्सपुरते मर्यादित नाही. सर्व्हर रीस्टार्ट न करता सर्व्हर कोड अपडेट करण्यासाठी ते सर्व्हर-साइड रेंडरिंग (SSR) साठी देखील वापरले जाऊ शकते. यामुळे SSR ॲप्लिकेशन्सच्या डेव्हलपमेंटला लक्षणीय गती मिळू शकते.
सामान्य समस्या आणि निराकरण
HMR एक शक्तिशाली साधन असले तरी, ते सेट अप आणि कॉन्फिगर करणे कधीकधी आव्हानात्मक असू शकते. येथे काही सामान्य समस्या आणि त्यावरील निराकरण टिप्स आहेत:
- HMR काम करत नाही: जर HMR काम करत नसेल, तर पहिली पायरी म्हणजे तुमचे वेबपॅक कॉन्फिगरेशन तपासणे, जेणेकरून `HotModuleReplacementPlugin` योग्यरित्या कॉन्फिगर केले आहे आणि डेव्हलपमेंट सर्व्हर `--hot` फ्लॅगसह सुरू झाला आहे याची खात्री करणे. तसेच, सर्व्हर तुमच्या डेव्हलपमेंट ओरिजिनवरून वेबसॉकेट कनेक्शनला परवानगी देण्यासाठी कॉन्फिगर केलेला असल्याची खात्री करा.
- पूर्ण पेज रीलोड होणे: जर तुम्हाला हॉट अपडेट्सऐवजी पूर्ण पेज रीलोडचा अनुभव येत असेल, तर तुमच्या कोडमध्ये त्रुटी असण्याची किंवा HMR अपडेट प्रक्रिया योग्यरित्या हाताळली जात नसल्याची शक्यता आहे. ब्राउझर कन्सोलमध्ये त्रुटी संदेश तपासा आणि तुम्ही तुमच्या कोडमध्ये योग्य HMR API वापरत असल्याची खात्री करा.
- स्थिती गमावणे (State Loss): HMR अपडेट्स दरम्यान तुमची ॲप्लिकेशन स्थिती गमावत असल्यास, तुम्हाला तुमची स्टेट मॅनेजमेंट धोरण समायोजित करण्याची किंवा स्थिती योग्यरित्या जतन करण्यासाठी कस्टम HMR हँडलर्स लागू करण्याची आवश्यकता असू शकते. Redux आणि Vuex सारख्या लायब्ररी HMR स्टेट पर्सिस्टन्ससाठी विशेषतः मदतनीस उपयुक्तता देतात.
- सर्क्युलर डिपेंडेंसी: सर्क्युलर डिपेंडेंसी कधीकधी HMR मध्ये समस्या निर्माण करू शकतात. कोणत्याही सर्क्युलर डिपेंडेंसी काढून टाकण्यासाठी तुमचा कोड रिफॅक्टर करण्याचा प्रयत्न करा. सर्क्युलर डिपेंडेंसी शोधण्यात मदत करणारी साधने वापरण्याचा विचार करा.
- विरोधाभासी प्लगइन्स: कधीकधी इतर प्लगइन्स किंवा लोडर्स HMR प्रक्रियेत हस्तक्षेप करू शकतात. ते समस्येचे कारण आहेत की नाही हे पाहण्यासाठी इतर प्लगइन्स अक्षम करून पहा.
विविध फ्रेमवर्क आणि लायब्ररीमध्ये HMR
HMR विविध जावास्क्रिप्ट फ्रेमवर्क आणि लायब्ररीद्वारे मोठ्या प्रमाणावर समर्थित आहे. काही लोकप्रिय फ्रेमवर्कमध्ये HMR कसे वापरले जाते ते पाहूया:रिएक्ट
रिएक्ट `react-hot-loader` पॅकेजद्वारे HMR ला समर्थन देते. हे पॅकेज तुम्हाला रिएक्ट कंपोनंट्सची स्थिती न गमावता अपडेट करण्याची परवानगी देते. `react-hot-loader` वापरण्यासाठी, तुम्हाला ते इंस्टॉल करावे लागेल आणि तुमच्या रूट कंपोनंटला `Hot` कंपोनंटने रॅप करावे लागेल:
npm install react-hot-loader --save-dev
import { hot } from 'react-hot-loader/root';
const App = () => {
return (
Hello, React!
);
};
export default hot(App);
व्ह्यू
Vue CLI वापरताना व्ह्यू HMR ला आउट-ऑफ-द-बॉक्स समर्थन देते. व्ह्यू CLI आपोआप HMR सक्षम करून वेबपॅक कॉन्फिगर करते. तुम्ही फक्त डेव्हलपमेंट सर्व्हर सुरू करू शकता:
vue serve
जेव्हा तुम्ही व्ह्यू कंपोनंट्सच्या कोडमध्ये बदल करता तेव्हा ते आपोआप अपडेट होतात.
अँँग्युलर
अँँग्युलर देखील अँँग्युलर CLI द्वारे HMR ला समर्थन देते. अँँग्युलरमध्ये HMR सक्षम करण्यासाठी, तुम्ही डेव्हलपमेंट सर्व्हर सुरू करताना `--hmr` फ्लॅग वापरू शकता:
ng serve --hmr
त्यानंतर अँँग्युलर तुमच्या कोडमध्ये बदल केल्यावर ॲप्लिकेशन आपोआप अपडेट करेल.
HMR स्वीकृतीवर जागतिक दृष्टीकोन
HMR चा स्वीकार विविध प्रदेश आणि डेव्हलपमेंट समुदायांमध्ये भिन्न आहे. मजबूत इंटरनेट पायाभूत सुविधा आणि आधुनिक डेव्हलपमेंट साधनांमध्ये प्रवेश असलेल्या विकसित देशांमध्ये, HMR मोठ्या प्रमाणावर स्वीकारले जाते आणि एक मानक सराव मानले जाते. या प्रदेशांतील डेव्हलपर अनेकदा त्यांची उत्पादकता आणि कार्यक्षमता सुधारण्यासाठी HMR वर अवलंबून असतात. कमी विकसित पायाभूत सुविधा असलेल्या देशांमध्ये, इंटरनेट कनेक्टिव्हिटी किंवा आधुनिक डेव्हलपमेंट साधनांच्या प्रवेशातील मर्यादेमुळे HMR चा स्वीकार कमी असू शकतो. तथापि, जसजशी इंटरनेट पायाभूत सुविधा सुधारेल आणि डेव्हलपमेंट साधने अधिक सुलभ होतील, तसतसे HMR चा स्वीकार जागतिक स्तरावर वाढण्याची अपेक्षा आहे.
उदाहरणार्थ, युरोप आणि उत्तर अमेरिकेत, आधुनिक वेब डेव्हलपमेंट प्रकल्पांमध्ये HMR जवळजवळ सार्वत्रिकपणे वापरले जाते. डेव्हलपमेंट टीम्स त्यांच्या वर्कफ्लोचा एक मुख्य भाग म्हणून ते स्वीकारतात. त्याचप्रमाणे, बंगळूर आणि सिंगापूर सारख्या आशियातील टेक हबमध्ये, HMR अत्यंत लोकप्रिय आहे. तथापि, मर्यादित इंटरनेट बँडविड्थ किंवा जुन्या हार्डवेअर असलेल्या प्रदेशांमध्ये, डेव्हलपर अजूनही पारंपारिक लाइव्ह रिलोडिंग किंवा मॅन्युअल रिफ्रेशवर अधिक अवलंबून असू शकतात, जरी हे आता कमी सामान्य होत आहे.
HMR चे भविष्य
HMR हे सतत विकसित होणारे तंत्रज्ञान आहे. वेब डेव्हलपमेंट जसजसे पुढे जात राहील, तसतसे आपण HMR मध्ये आणखी सुधारणा आणि नवनवीन शोध पाहू शकतो. काही संभाव्य भविष्यातील घडामोडींमध्ये हे समाविष्ट आहे:
- सुधारित कार्यक्षमता: HMR ची कार्यक्षमता आणखी ऑप्टिमाइझ करण्यासाठी प्रयत्न सुरू आहेत, ज्यामुळे अपडेट्स लागू करण्यासाठी लागणारा वेळ कमी होईल आणि ॲप्लिकेशनच्या कार्यक्षमतेवरील परिणाम कमी होईल.
- नवीन तंत्रज्ञानासह उत्तम एकत्रीकरण: जसे नवीन वेब तंत्रज्ञान उदयास येईल, तसतसे HMR ला त्यांच्याशी जुळवून घ्यावे लागेल आणि एकत्रित व्हावे लागेल. यात वेबअसेम्बली, सर्व्हरलेस फंक्शन्स आणि एज कंप्युटिंग सारख्या तंत्रज्ञानाचा समावेश आहे.
- अधिक बुद्धिमान अपडेट्स: HMR च्या भविष्यातील आवृत्त्या कोड बदलांचे अधिक हुशारीने विश्लेषण करू शकतील आणि ॲप्लिकेशनचे फक्त आवश्यक भाग अपडेट करू शकतील, ज्यामुळे अपडेट वेळ आणखी कमी होईल आणि ॲप्लिकेशन स्थितीवरील परिणाम कमी होईल.
- वर्धित डीबगिंग क्षमता: HMR डीबगिंग साधनांसह एकत्रित केले जाऊ शकते जेणेकरून अपडेट प्रक्रियेबद्दल अधिक तपशीलवार माहिती प्रदान करता येईल आणि डेव्हलपर्सना समस्या लवकर ओळखण्यास आणि निराकरण करण्यास मदत होईल.
- सरलीकृत कॉन्फिगरेशन: HMR चे कॉन्फिगरेशन सोपे करण्यासाठी प्रयत्न केले जात आहेत, ज्यामुळे डेव्हलपर्सना त्यांच्या बिल्ड टूल्स कॉन्फिगर करण्यासाठी तास घालवल्याशिवाय HMR सह प्रारंभ करणे सोपे होईल.
निष्कर्ष
जावास्क्रिप्ट मॉड्युल हॉट अपडेट प्रोटोकॉल (HMR) हे एक शक्तिशाली साधन आहे जे डेव्हलपमेंट वर्कफ्लोमध्ये लक्षणीय वाढ करू शकते आणि एकूण डेव्हलपर अनुभव सुधारू शकते. ॲप्लिकेशनची स्थिती न गमावता रिअल-टाइममध्ये बदल पाहण्याची परवानगी देऊन, HMR तुम्हाला जलद पुनरावृत्ती करण्यास, अधिक सहजतेने डीबग करण्यास आणि अधिक प्रभावीपणे सहयोग करण्यास मदत करू शकते. तुम्ही वेबपॅक, पार्सल, व्हाइट किंवा इतर कोणताही मॉड्युल बंडलर वापरत असाल तरी, HMR हे आधुनिक फ्रंट-एंड डेव्हलपमेंटसाठी एक आवश्यक साधन आहे. HMR स्वीकारल्याने निःसंशयपणे उत्पादकता वाढेल, डेव्हलपमेंटचा वेळ कमी होईल आणि अधिक आनंददायक डेव्हलपमेंट अनुभव मिळेल.
वेब डेव्हलपमेंट जसजसे विकसित होत राहील, तसतसे HMR निःसंशयपणे अधिकाधिक महत्त्वाची भूमिका बजावेल. नवीनतम HMR तंत्रे आणि तंत्रज्ञानासह अद्ययावत राहून, तुम्ही या शक्तिशाली साधनाचा पुरेपूर फायदा घेत आहात आणि तुमची डेव्हलपमेंट कार्यक्षमता जास्तीत जास्त वाढवत आहात याची खात्री करू शकता.
तुमच्या पसंतीच्या फ्रेमवर्कसाठी (रिएक्ट, व्ह्यू, अँँग्युलर, इ.) विशिष्ट HMR अंमलबजावणीचा शोध घ्या आणि लाइव्ह डेव्हलपमेंट अपडेट्सच्या कलेमध्ये खऱ्या अर्थाने प्रभुत्व मिळवण्यासाठी स्टेट मॅनेजमेंट आणि कोड स्प्लिटिंग सारख्या प्रगत तंत्रांचा प्रयोग करा.